﻿/*
 ***************************************************************************
 * Microsoft Visual C# .NET
 * 名称：       Shpm.System.Web.Control.CheckDouble
 * 类型：       服务端输入校验类
 * 功能说明：   小数项目校验类
 * 作者：       郭晓庆
 * 创建日期：   2007/07/10
 * 修改日期     修改者      修改内容
 * 
 * 
 * ---
 ***************************************************************************
*/
using System;
using System.Collections.Generic;
using System.Text;
using Shpm.System.Web.Control;

namespace Shpm.System.Web.Control
{
    public class CheckDouble : ComAbsChecker
    {
        /** 整数的位数 */
        private int intLen = 0;
        /** 小数的位数 */
        private int decLen = 0;
        /**
         * 构造函数
         * @param value   输入值
         */
        public CheckDouble(String value)
            :base(value)
        {
            
        }

        /**
         * 构造函数
         * @param value   输入值
         * @param intLen  整数的位数
         * @param decLen  小数的位数
         */
        public CheckDouble(String value, int intLen, int decLen)
            : base(value)
        {
            this.intLen = intLen;
            this.decLen = decLen;
        }

        public CheckDouble(String value, int intLen, int decLen, Shpm.System.Validator.ComAbsMsg msg)
            : base(value, msg)
        {
            this.intLen = intLen;
            this.decLen = decLen;
        }

        /**
         * 数值(包含小数)处理。
         * @param value 输入值
         * @return true:正常长度 / false:超过长度
         */
        protected override bool doCheck(String value)
        {

            // 未输入检查
            if (base.isEmpty(value))
            {
                return true;
            }

            // 半角的长度检查
            if (Encoding.UTF8.GetBytes(value).Length != value.Length)
            {
                return false;
            }

            try
            {
                // 数值转换
                Double dvalue = Double.Parse(value);
               

                String[] sp = value.Split('.');
                // 整数的位数检查
                if (intLen != 0)
                {
                    if (dvalue < 0.0)
                    {
                        // 负数处理
                        intLen++;
                    }
                    if (intLen < Encoding.UTF8.GetBytes(sp[0]).Length)
                    {
                        return false;
                    }
                }
                // 小数的位数检查
                if (decLen != 0)
                {
                    if (sp.Length > 1 && decLen < Encoding.UTF8.GetBytes(sp[1]).Length)
                    {
                        return false;
                    }
                }
                return true;
            }
            catch
            {
                return false;
            }

        }
    }
}
